/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.dto.OrganizacionDto;
import com.brain.core.dto.DocumentoLegalDto;
import com.brain.core.dto.ParametroDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.DocumentoLegalManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.util.ApplicationHelper;
import com.brain.core.view.util.ConstantesCore;

import javax.faces.event.ActionEvent;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

@Controller("documentoLegalMBean")
@Scope("session")
public class DocumentoLegalMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(DocumentoLegalMBean.class);
    
    @Resource
    private DocumentoLegalManager manager;
    @Resource
    private RecursosManager recursosManager;
    private List<DocumentoLegalDto> lista;
    private DocumentoLegalDto dto;
    private DocumentoLegalDto dtoFiltro;
    private String keyTitulo = "documento.legal.panel";
    private List<ParametroDto> siTiposDocumentosLegales;
    
    
    @Autowired
    private ApplicationMBean applicationMBean;
    
    @Autowired
    private SessionMBean sessionMBean;

    public DocumentoLegalMBean() {
       // sessionMBean.setAccion(ConstantesWeb.Formulario.LISTA);
        //sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dtoFiltro = new DocumentoLegalDto();        
        
    }
    
    public String iniciar () {
        this.lista = null;     
        this.dto = null;
        this.dtoFiltro = new DocumentoLegalDto();    
        this.dtoFiltro.setTipoDto(recursosManager.obtenerParametroPorID(ConstantesCore.Parametro.TODOS));
        this.dtoFiltro.setOrganizacionDto(sessionMBean.getSessionOrganizacionDto());
        return ConstantesCore.UrlNavegacion.URL_LISTA_DOCUMENTOS_LEGALES;
    }

    public String nuevo() {
        sessionMBean.setAccion(ConstantesCore.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.lista = new ArrayList<DocumentoLegalDto>();
        this.dto = new DocumentoLegalDto();                
        this.dto.setEstado(Boolean.TRUE);        
        return ConstantesCore.UrlNavegacion.URL_DOCUMENTO_LEGAL;
    }

    public String editar() {
        sessionMBean.setAccion(ConstantesCore.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));        
        ApplicationHelper.cargarBitacoraEntidad(ConstantesCore.Entidad.PRODUCTO, this.dto.getId());
        return ConstantesCore.UrlNavegacion.URL_DOCUMENTO_LEGAL;
    }

    public String ver() {
        sessionMBean.setAccion(ConstantesCore.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));        
        ApplicationHelper.cargarBitacoraEntidad(ConstantesCore.Entidad.PRODUCTO, this.dto.getId());
        return ConstantesCore.UrlNavegacion.URL_DOCUMENTO_LEGAL;
    }
    

    public void buscar(ActionEvent ae) {
        this.dtoFiltro.setOrganizacionDto(this.sessionMBean.getSessionOrganizacionDto());
        try {
            this.lista = this.manager.obtenerdocumentosLegales(dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
            showError(ex.getMessage());
        }
    }

    public String guardar() {
        String to = null;
        String mensajeTrx = "";

        {
            this.dto.setUsuario(sessionMBean.getSessionUsuarioDto().getId());
            this.dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
            this.dto.setTerminal(sessionMBean.getSessionTerminal());                        
        }
        
        if (sessionMBean.getAccion() == ConstantesCore.Formulario.NUEVO) {
            try {                
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.nuevo(this.dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);                
                to = retroceder();
            } catch (Exception ex) {
                showError(ex.getMessage());
                to = null;
            }
        }else if (sessionMBean.getAccion() == ConstantesCore.Formulario.EDITAR) {
            try {
                UtilCore.General.toUpperCaseDto(this.dto);
                this.manager.editar(this.dto);
                mensajeTrx = UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok");
                showMessage(mensajeTrx);                
                to = retroceder();
            } catch (Exception ex) {
                showError(ex.getStackTrace().toString());
                ex.getStackTrace();
                to = null;
            }
        }
        return to;
    }

    public String retroceder() {
        buscar(null);
        sessionMBean.setAccion(ConstantesCore.Formulario.LISTA);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return ConstantesCore.UrlNavegacion.URL_LISTA_DOCUMENTOS_LEGALES;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public DocumentoLegalDto getDto() {
        return dto;
    }

    public void setDto(DocumentoLegalDto dto) {
        this.dto = dto;
    }

    public DocumentoLegalDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(DocumentoLegalDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public List<DocumentoLegalDto> getLista() {
        return lista;
    }

    public void setLista(List<DocumentoLegalDto> lista) {
        this.lista = lista;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        DocumentoLegalMBean.logger = logger;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public DocumentoLegalManager getManager() {
        return manager;
    }

    public void setManager(DocumentoLegalManager manager) {
        this.manager = manager;
    }

    public List<ParametroDto> getSiTiposDocumentosLegales() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.DOCUMENTOS_LEGALES_VENTA_TIPO,ConstantesCore.Parametro.TODOS);
    }

    public void setSiTiposDocumentosLegales(List<ParametroDto> siTiposDocumentosLegales) {
        this.siTiposDocumentosLegales = siTiposDocumentosLegales;
    }

    

    
    
}
